package com.tbit.uqbike.webmanager.controller;

import com.tbit.uqbike.manager.exception.BaseException;
import com.tbit.uqbike.object.pojo.dto.UserFundsFlowDownloadDTO;
import com.tbit.uqbike.object.pojo.vo.UserFundsFlowSumVO;
import com.tbit.uqbike.object.pojo.vo.UserFundsFlowVO;
import com.tbit.uqbike.object.value.LoginInfo;
import com.tbit.common.entity.view.PageResult;
import com.tbit.common.entity.view.Result;
import com.tbit.uqbike.service.base.TokenService;
import com.tbit.uqbike.service.business.UserFundsFlowService;
import com.tbit.uqbike.webmanager.util.csv.annotations.AsyncDownload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.Objects;

/**
 * 用户管理-流水记录
 *
 * @Author:BUGTian
 * @DATE: 2022/11/19
 */
@RestController
@RequestMapping("/userFundsFlow")
public class UserFundsFlowController {

    @Autowired
    private UserFundsFlowService userFundsFlowService;
    @Autowired
    private TokenService tokenService;


    /**
     * 分页查询流水记录
     *
     * @param request
     * @param page         当前页码
     * @param size         每页显示的行数
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param phone        手机号
     * @param changeType   收支类型 1：充值，2：消费
     * @param capitalType  业务类型 1：余额，2：押金，3：礼品卡，4：购卡订单，5：骑行订单直付
     * @param businessType 子业务类型  1：用户充余额 2：用户退余额 3：人工充余额 4：人工扣余额 5：骑行消费余额 6：充值结束订单 7：欠款补交 8：骑行退款 9：用户充押金 10：用户退押金 11：人工充押金 12：人工扣押金 13：充值赠送礼品卡 14：退余额扣除礼品卡 15：礼品卡兑换 16：骑行消费礼品卡 17：人工充礼品卡 18：人工扣礼品卡 19：购买骑行卡 20：骑行卡退款 21：购买免押卡 22：免押卡退款 23：购买会员卡 24：会员卡退款 25：购买优惠券套餐 26：优惠券套餐退款
     * @return
     */
    @GetMapping("/queryPage")
    public Result<PageResult<UserFundsFlowVO>> queryPage(HttpServletRequest request, Integer page, Integer size, Date startTime, Date endTime, String phone, Integer changeType, Integer capitalType, Integer businessType) {
        LoginInfo login = BaseController.getLogin(request);
        PageResult<UserFundsFlowVO> pageResult = userFundsFlowService.queryPage(login, page, size, startTime, endTime, phone, changeType, capitalType, businessType);
        return Result.success(pageResult);
    }

    /**
     * 流水记录账单下载
     *
     * @param downloadDTO
     * @return
     */
    @AsyncDownload(defaultFileName = "流水记录账单")
    @GetMapping("/download")
    public Result download(UserFundsFlowDownloadDTO downloadDTO) {
        LoginInfo login = tokenService.getLoginInfo(downloadDTO.getToken());
        String url = userFundsFlowService.download(login, downloadDTO);
        return Result.success(url);
    }

    /**
     * 流水记录统计
     *
     * @param request
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param phone        手机号
     * @param changeType   收支类型 1：充值，2：消费
     * @param capitalType  业务类型 1：余额，2：押金，3：礼品卡，4：购卡订单，5：骑行订单直付
     * @param businessType 子业务类型  1：用户充余额 2：用户退余额 3：人工充余额 4：人工扣余额 5：骑行消费余额 6：充值结束订单 7：欠款补交 8：骑行退款 9：用户充押金 10：用户退押金 11：人工充押金 12：人工扣押金 13：充值赠送礼品卡 14：退余额扣除礼品卡 15：礼品卡兑换 16：骑行消费礼品卡 17：人工充礼品卡 18：人工扣礼品卡 19：购买骑行卡 20：骑行卡退款 21：购买免押卡 22：免押卡退款 23：购买会员卡 24：会员卡退款 25：购买优惠券套餐 26：优惠券套餐退款
     * @return
     */
    @GetMapping("/sumTotal")
    public Result<UserFundsFlowSumVO> sumTotal(HttpServletRequest request, Date startTime, Date endTime, String phone, Integer changeType, Integer capitalType, Integer businessType) {
        LoginInfo login = BaseController.getLogin(request);
        UserFundsFlowSumVO userFundsFlowSumVO = userFundsFlowService.sumTotal(login, startTime, endTime, phone, changeType, capitalType, businessType);
        return Result.success(userFundsFlowSumVO);
    }
}
